/**
 * 映射类似于函数的对应关系，每个 x对应一个 y，而 map是每个键对应一个值。
 * 会 python的朋友学习后就会知道这和 python的字典非常类似。
 *
 * map特性：map 会按照键的顺序从小到大自动排序，键的类型必须可以比较大小
 */
#include <iostream>
#include <map>
#include <string>

using namespace std;

map<string, int> init_map();

void print_map(const map<string, int>& map);

int main()
{
    // 初始化定义
    map<string, string> string_map;
    // 初始化 map
    map<string, int> int_map = init_map();
    print_map(int_map);

    // 返回键为 key的映射的迭代器 O(logN)
    // 注意：用 find函数来定位数据出现位置，它返回一个迭代器。当数据存在时，返回数据所在位置的迭代器，数据不存在时，返回 mp.end()
    auto map_iterator = int_map.find("key1");

    return 0;

}

/**
 * 初始化 map
 * @return
 */
map<string, int> init_map()
{
    map<string, int> int_map;
    for (int i = 0; i < 10; i++)
    {
        int_map.insert(make_pair("key" + to_string(i), i));
    }
    return int_map;
}

/**
 * map 打印
 * @param map 要打印的 map
*/
void print_map(const map<string, int>& map)
{
    for (auto &iter: map)
    {
        cout << iter.first << " : " << iter.second << "|";
    }
    cout << endl;
}